home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / rexx / doec.ced next >
Text File  |  1995-04-06  |  6KB  |  298 lines

  1. /* */
  2. /*
  3.     CygnusEd Pro 2.11 Rexx script to:
  4.         1.    fix some common mistakes
  5.         2.    drive Amiga E compiler
  6.         3.    indicate if source compiler, where and what
  7.             errors occured.
  8.  
  9. */
  10. OPTIONS RESULTS
  11.  
  12. flush=' Work:c2/flushlibs'
  13. compiler='AMIGAE:BIN/ecdemo30e'
  14. options=' IGNORECACHE SYM'
  15. log='t:ec_errors'
  16. log2='t:ec_rc'
  17.  
  18. LF='0A'x
  19. CR='0D'x
  20. TAB='09'x
  21. IF ~show('l', "rexxsupport.library") THEN DO
  22.    CALL addlib('rexxsupport.library',0,-30,0)
  23. END
  24.  
  25. ih=NULL()
  26. oh=NULL()
  27.  
  28. STATUS 19
  29. fullpath=RESULT
  30.  
  31. IF UPPER(RIGHT(fullpath,2))='.E' THEN
  32.   fullpath=LEFT(fullpath,LENGTH(fullpath)-2)
  33. ELSE DO
  34.   OKAY1 'This is not an E sourcefile'
  35.   EXIT 0
  36. END
  37.  
  38. 'SPLIT VIEW'
  39. /* fix common mistakes */
  40. 'BEG OF FILE'
  41. REPLACE "'END IF'" "'ENDIF'" 1 0 1 0 T
  42. 'BEG OF FILE'
  43. REPLACE "'END PROC'" "'ENDPROC'" 1 0 1 0 T
  44. 'BEG OF FILE'
  45. REPLACE "'PNT TO '" "'PTR TO '" 1 0 1 0 T
  46. 'BEG OF FILE'
  47. REPLACE "' '" "' '" 1 0 1 0 T
  48.  
  49. SAVE
  50. token='$VER:'
  51. newfile=0
  52. verprefix=''
  53. versuffix=''
  54. 'BEG OF FILE'
  55. SEARCH FOR token 1 0 1 0
  56. IF (RESULT~=0) THEN DO
  57.   verprefix=''
  58.   versuffix=''
  59.   verfound=1
  60.   STATUS
  61.   'MARK LOCATION 1'
  62.   MARK BLOCK
  63.   IF (RESULT=0) THEN MARK BLOCK
  64.   SEARCH FOR "'''" 1 0 1 0
  65.   'CUT BLOCK'
  66.   STATUS 60
  67.   line=STRIP(SUBSTR(RESULT,6))
  68.   PARSE VAR line ft vt date
  69.   PARSE VAR ft file'.'dummy
  70.   PARSE VAR vt version'.'revision
  71.   revision=('0'revision)+1
  72. END
  73. ELSE DO
  74.   'END OF FILE'
  75.   'MARK LOCATION 1'
  76.   newfile=1
  77.   verprefix=LF || 'progver:' || LF || TAB || 'CHAR' || TAB || "'"
  78.   versuffix="',0" || LF
  79.   verfound=0
  80.   STATUS 21
  81.   t=RESULT
  82.   file=LEFT(t,LENGTH(t)-2)
  83.   version=1
  84.   revision=0
  85. END
  86.  
  87. 'BEG OF FILE'
  88. TEXT LF
  89. 'BEG OF FILE'
  90. SEARCH FOR "'OPT MODULE'" 1 0 1 0
  91. IF (RESULT~=0) THEN DO
  92.   'JUMP TO MARK 1'
  93.   IF verfound=1 THEN DO
  94.     UP
  95.     'DELETE LINE'
  96.     'DELETE LINE'
  97.   END
  98.   verprefix=LF || '/* ' || "'"
  99.   file=file || '.m'
  100.   versuffix= "',0" || ' */' || LF
  101. END
  102. 'BEG OF FILE'
  103. 'DELETE LINE'
  104.  
  105. 'JUMP TO MARK 1'
  106. TEXT 
  107. date='(' || TIME() '|' DATE('W') DATE() || ')\n'
  108. TEXT verprefix || token file version || '.' || revision date || versuffix
  109. STATUS 18
  110. changes=RESULT
  111. SAVE
  112.  
  113. LIBS.dos = '00 00 00 00'x
  114. LIBS.dos.OPENCOUNT = 0
  115. LIBS.dos.Open='FFE2'x||SI||'200203'x
  116. LIBS.dos.Close='FFDC'x||A||'2002'x
  117. LIBS.dos.Execute='FF22'x||SAA||'20020304'x
  118. LIBS.dos.SystemTagList='FDA2'x||SS||'200203'x
  119.  
  120. SYS_Dummy='80000020'x
  121. SYS_Input='80000021'x
  122. SYS_Output='80000022'x
  123. SYS_Asynch='80000023'x
  124. SYS_UserShell='80000024'x
  125. SYS_CustomShell='80000025'x
  126.  
  127. IF ~SHOW('L','rexxsupport.library') THEN CALL ADDLIB('rexxsupport.library',0,-30,0)
  128. IF ~SHOW('L','rxgen.library')       THEN CALL ADDLIB('rxgen.library',0,-30,0)
  129.  
  130. call GenOpenLib("dos",0)
  131.  
  132. ih=GenACall("dos","Open","NULL:",1005)
  133. IF ih=NULL() THEN GOTO finish
  134. oh=GenACall("dos","Open","NULL:",1006)
  135. IF oh=NULL() THEN GOTO finish
  136.  
  137. com1='ram:flushlibs'
  138. com2='ram:ec'
  139. IF LENGTH(flush)>0 THEN DO
  140.   IF EXISTS(com1)=0 THEN CLI('copy' flush com1)
  141.   CALL        CLI(com1)
  142. END
  143. IF EXISTS(com2)=0 THEN CLI('copy' compiler com2)
  144. bytenum=    CLI(com2 '>'log' 'fullpath' ERRBYTE 'options)
  145.  
  146. t=OPEN(INFILE,log,'R')
  147. IF t=0 THEN EXIT
  148.  
  149. message=''
  150. err=0
  151. line=''
  152. redo=0
  153. DO WHILE EOF(INFILE)=0
  154.   IF redo=0 THEN DO
  155.     p=1
  156.     DO WHILE EOF(INFILE)=0
  157.         b=GetLine()
  158.         t=LEFT(b,1)
  159.         IF t<'0' | t>'9' THEN LEAVE
  160.     END
  161.   END
  162.   ELSE
  163.     redo=0
  164.   SELECT
  165.     WHEN test('ERROR:')~=0 THEN DO
  166.       err=1
  167.       ecerror=SUBSTR(b,posn+7)
  168.       b=GetLine()
  169.       SELECT
  170.         WHEN test('LINE ')~=0 THEN DO
  171.           t=test(':')
  172.           linetext=DeTab(SUBSTR(b,t+2))
  173.           linenum=SUBSTR(b,6,t-6)
  174.           IF bytenum=0 THEN DO
  175.             message=message||LF||'LINE ERROR : 'ecerror||LF||linetext||LF
  176.             'JUMP TO LINE' linenum
  177.           END
  178.           ELSE DO
  179.             message=message||LF||'BYTE ERROR: 'ecerror||LF||linetext||LF
  180.             'JUMP TO LINE' linenum
  181.             'MARK LOCATION 2'
  182.             'JUMP TO BYTE' bytenum
  183.           END
  184.           'MARK LOCATION 1'
  185.         END
  186.         OTHERWISE DO
  187.           message=message||LF||'GENERAL ERROR: 'ecerror||LF
  188.           redo=1
  189.         END
  190.       END
  191.     END
  192.     WHEN test('UNREFERENCED:')~=0 THEN DO
  193.       l=0
  194.       p=test(',')
  195.       DO WHILE p~=0
  196.         t=LEFT(b,p)
  197.         b=SUBSTR(b,p+1)
  198.         l=l+p
  199.         IF l>70 THEN DO
  200.           message=message||LF
  201.           l=0
  202.         END /* IF l */
  203.         message=message||t
  204.         p=test(',')
  205.       END /* WHILE p */
  206.       IF LENGTH(b)~=0 THEN message=message||b||LF
  207.     END
  208.     WHEN test('WITH:')~=0 THEN DO
  209.         badtext=SUBSTR(b,posn+6)
  210.         'BEG OF LINE'
  211.         SEARCH FOR "'"||badtext||"'"
  212.         'MARK LOCATION 2'
  213.         message=message||LF||'»'SUBSTR(b,posn+6)'«'||LF
  214.     END
  215.     OTHERWISE
  216.   END /* is UNREFERENCED */
  217. END
  218. t=CLOSE(INFILE)
  219. IF err=0 THEN DO
  220.   message=message||LF||'compiled OK'
  221.   QUIT
  222. END
  223. ELSE DO
  224.   DO WHILE changes>0
  225.     UNDO
  226.     changes=changes-1
  227.   END
  228.   'JUMP TO MARK 1'
  229. SAVE
  230. END
  231. OKAY1 message
  232.  
  233. finish:
  234. IF ih~=NULL() THEN call GenACall("dos","Close",ih)
  235. IF oh~=NULL() THEN call GenACall("dos","Close",oh)
  236. call GenCloseLib("dos")
  237.  
  238. EXIT
  239.  
  240. test:
  241.   PARSE ARG find
  242.   posn=POS(find,b)
  243. RETURN posn
  244.  
  245. CLI:
  246.   PARSE ARG clicmd
  247.   r=GenACall("dos","SystemTagList",clicmd||NULL(),SYS_Input||ih||SYS_Output||oh||NULL())
  248. RETURN C2D(r)
  249.  
  250. NoANSI: PROCEDURE
  251.   PARSE ARG t
  252.   b=''
  253.   DO FOREVER
  254.     p=POS('1B5B'x,t)
  255.     IF p=0 THEN LEAVE
  256.     b=b||LEFT(t,p-1)
  257.     t=SUBSTR(t,p+2)
  258.     SELECT
  259.       WHEN LEFT(t,2)='0m'    THEN p=3
  260.       WHEN LEFT(t,6)='43;32m'    THEN p=7
  261.       OTHERWISE p=0
  262.     END
  263.     IF p=0 THEN LEAVE
  264.     t=SUBSTR(t,p)
  265.   END
  266. RETURN b||t
  267.  
  268. /* converts tabs to spaces */
  269. DeTab: PROCEDURE
  270.   PARSE ARG b
  271.   c=POS('09'x,b)
  272.   DO WHILE c~=0
  273.     t=c-1
  274.     b=LEFT(b,t)LEFT('',8-(t//8),' ')SUBSTR(b,c+1)
  275.     c=POS('09'x,b)
  276.   END
  277. RETURN b
  278.  
  279. /* skip empty lines and split CR'ed lines */
  280. GetLine: PROCEDURE EXPOSE CR line
  281.   b=''
  282.   DO WHILE b=''
  283.     DO WHILE EOF(INFILE)=0 & line=''
  284.       line=NoANSI(READLN(INFILE))
  285.     END
  286.     IF line='' THEN RETURN line
  287.     p=POS(CR,line)
  288.     IF p=0 THEN DO
  289.       b=line
  290.       line=''
  291.     END
  292.     ELSE DO
  293.       b=LEFT(line,p-1)
  294.       line=SUBSTR(line,p+1)
  295.     END
  296.   END
  297. RETURN b
  298.